#ifndef _CHAT_H_
#define _CHAT_H_
#include "definiciones.h"
#include "InformacionChat.h"
#include "InformacionConversacion.h"
#include <vector>
#include <string>

#define COLA_INBOX  0
#define COLA_OUTBOX 0
#define COLA_EDITOR 1

#define FLAG_FIN_DATOS 0
#define FLAG_MAS_DATOS 1

#define ARCHIVO_USUARIOS "/home/lucas/workspace/7574/intento2/usuarios.dat"
#define ARCHIVO_ID_CONVERSACION "/home/lucas/workspace/7574/intento2/idConversacion.dat"

typedef struct{
    InformacionChat* info;
    unsigned long numeroUsuario;
}Sesion;

typedef struct{
    unsigned long numeroUsuario;
    unsigned long idConversacion;

    int idColaOutBox;
    int idColaInBox;
    int idColaEditor;
    char* ultimoMensaje;

    int idSHMConversacion;
    void* baseConversacion;
}ChatHandlerConversacion;

Sesion* ChatIniciarSesion(unsigned long numeroUsuario);
void ChatCerrarSesion(Sesion* sesion);
std::vector<long> ChatListarTodasLasConversaciones(Sesion *sesion);

long ChatCrearConversacion(Sesion* sesion);
bool ChatUnirseAConversacion(Sesion* sesion, long id);
void ChatCerrarConversacion(Sesion* sesion, long id);

InformacionConversacion* ChatObtenerDatosDeConversacion(long numeroUsuario, long idConversacion);
void ChatLiberarDatosDeConversacion(InformacionConversacion* conversacion);

void ChatEnviarMensaje(InformacionConversacion* conversacion, std::string mensaje);
std::string ChatRecibirMensaje(InformacionConversacion* conversacion);

#endif /* _CHAT_H_ */
